
package menus;

import classes.*;
import java.io.IOException;
import java.util.ArrayList;
import persistencias.* ;

import java.util.List;

public class Principal {
        
    Cliente c = null;
    Motorista m = null;
    Veiculo v = null;
    TipoLocacao tp = null;
    Funcionario f = null;
    
    
   public Cliente menuCadastroCliente(PCliente p) {
       String nome;
       long cpf;
       
       System.out.println("Digite o nome do Cliente: ");
       nome = Console.readString();
       System.out.println("Digite o cpf do Cliente:");
       cpf = Console.readLong();
       
       Cliente cliente = new Cliente(nome, cpf);
       if (p.consultarCpf(cliente) != null) p.adicionar(cliente);
      
       return cliente;
}

public Motorista menuCadastroMotorista (PMotorista p) {
    String nome;
    long cpf;
    long cnh;
    
    System.out.println("Digite o nome do Motorista: ");
    nome = Console.readString();
    System.out.println("Digite o cpf do Motorista:");
    cpf = Console.readLong();
    System.out.println("Digite a cnh do Motorista:");
    cnh = Console.readLong();
    
    Motorista motorista = new Motorista(nome, cpf, cnh);

    if (p.consultarCnh(motorista) != null) p.adicionar(motorista);
    return motorista;
}
   
public void menuCadastroFuncionario (PFuncionario p) {
    String nome;
    long cpf;
    String cargo;
    
    System.out.println("Digite o nome do Funcionário: ");
    nome = Console.readString();
    System.out.println("Digite o cpf do Funcionário:");
    cpf = Console.readLong();
    System.out.println("Digite o cargo do Funcionário:");
    cargo = Console.readString();
    
    Funcionario funcionario = new Funcionario(nome, cpf, cargo);

    if (p.consultarCpf(funcionario) != null) p.adicionar(funcionario);
}

public void menuCadastroVeiculo (PVeiculo p) {
    String placa, marca, modelo;
    
    System.out.println("Digite a placa do Veículo: ");
    placa = Console.readString();
    System.out.println("Digite a marca do Veículo:");
    marca = Console.readString();
    System.out.println("Digite o modelo do Veículo:");
    modelo = Console.readString();
    Veiculo veiculo = new Veiculo(placa, marca, modelo);
   
    int aux;
    aux = p.consultarPlaca(veiculo);
    if (aux == -1) p.adicionar(veiculo);
}

public void menuCadastroTipoDeLocacao (PTipoLocacao p) {
    String tipo;
    Double precoKm;
    Double taxaBase;
        
    System.out.println("Digite o Tipo da Locação: ");
    tipo = Console.readString();
    System.out.println("Digite o Preço por km:");
    precoKm = Console.readDouble();
    System.out.println("Digite a Taxa Base:");
    taxaBase = Console.readDouble();
    TipoLocacao tipoLocacao = new TipoLocacao(tipo, precoKm, taxaBase);

    p.adicionar(tipoLocacao);
}

public void menuCadastrosLocacao(PCliente pc, PVeiculo pv, PTipoLocacao pTL,
                                    PMotorista pM, PLocacao pL){
    
      Principal p = new Principal();
      int nDiarias, contador = 0, i, nVeiculo;
      List<Veiculo> veiculosLivres = new ArrayList<Veiculo>();
      String tipoEscolhido;
      Motorista mot = null;
      Veiculo veic = null;
      TipoLocacao tplc = null;
     
      Cliente clnt = p.menuCadastroCliente(pc);
      
      for( i = 0; i < pv.getVeiculos().size(); i++) {
            if (pv.getVeiculos().get(i).isLivre()) {
                veiculosLivres.add(pv.getVeiculos().get(i));
                System.out.println("Veículo: " + contador);
                System.out.println("Cor: " + pv.getVeiculos().get(i).getCor());
                System.out.println("Modelo: " + pv.getVeiculos().get(i).getModelo());
                System.out.println("Tipo: " + pv.getVeiculos().get(i).getTipo());
                System.out.println( "Marca: " + pv.getVeiculos().get(i).getMarca());
                System.out.println("");
                contador++;
             }
        }
        nVeiculo = 999999999;
        while (nVeiculo > contador){
                    System.out.println("Digite o número do veículo que deseja locar.");
                    nVeiculo = Console.readInteger();
        }
        pv.getVeiculos().get(nVeiculo).setLivre(false);
        
                                 
        System.out.println("Tipo de Locacao: ");
        tipoEscolhido = Console.readString();
        int indice = pTL.consultar(tipoEscolhido);
        TipoLocacao auxiliar = new TipoLocacao (pTL.getTiposDeLocacao().get(indice).getTipo(),
                                                pTL.getTiposDeLocacao().get(indice).getPrecoKm(),
                                                pTL.getTiposDeLocacao().get(indice).getTaxaBase());

        System.out.println("Número de dias que deseja permanecer com o veículo: ");
        nDiarias = Console.readInteger();

        System.out.println("Número de motoristas: ");
        int nMotoristas;
        nMotoristas = Console.readInteger();
        List<Motorista> listaMotoristaAux = null;
        for(i = 0; i < nMotoristas; i++) {
                listaMotoristaAux.add(p.menuCadastroMotorista(pM));
         }
                                  
         System.out.println("Data de hoje: ");
         String dataHoje;
         dataHoje = Console.readString();
                                  
         System.out.println("Km Inicial: ");
         Double kmInicial;
         kmInicial = Console.readDouble();

         Locacao locacao = new Locacao(auxiliar, kmInicial, dataHoje, nDiarias, clnt, pv.getVeiculos().get(nVeiculo), listaMotoristaAux);
         pL.adicionar(locacao);
         
    // Cliente, Motorista, Veiculo e TipoLocacao tem que ter a locacao adicionada a seus objetos

    clnt.setLocacao(locacao);
    
    for (i=0; i<locacao.getMotoristas().size(); i++) {
        mot.setLocacao(locacao);
    }
    
    veic.setLocacao(locacao);
    
    tplc.setLocacao(locacao);
    
}

public void menuCadastros (PCliente pC, PVeiculo pV, PMotorista pM, 
                            PFuncionario pF, PTipoLocacao pTL, PLocacao pL) {


             int opcao=1;
             Principal p = new Principal();

              while (opcao != 0) { 

                System.out.println("Locarrão Rent a Car");
                System.out.println("Digite o número referente ao tipo de cadastro desejado.");
                System.out.println("1 - Cliente");
                System.out.println("2 - Motorista");
                System.out.println("3 - Funcionário");
                System.out.println("4 - Tipo de Locação");
                System.out.println("5 - Veículos");
                System.out.println("6 - Locação");
                System.out.println("Digite 0 zero para ir ao menu anterior.");

                opcao = Console.readInteger();

                switch (opcao) {

                    case 1 :
                                    p.menuCadastroCliente(pC);
                                    break;

                    case 2:
                                    p.menuCadastroMotorista(pM);
                                    break;

                    case 3:
                                    p.menuCadastroFuncionario(pF);
                                    break;

                    case 4:
                                    p.menuCadastroTipoDeLocacao(pTL);
                                    break;

                    case 5:
                                    p.menuCadastroVeiculo(pV);
                                    break;

                    case 6:
                                   p.menuCadastrosLocacao(pC, pV, pTL, pM, pL);
                                   break;
                }
           }
}

public void alteraCadastroCliente(PCliente p){
    String nome = null;
    long cpf;
    String endereco;
    long telefone;
    
    System.out.println("Digite o cpf do cliente");
    cpf = Console.readLong();
    Cliente cliente = new Cliente(nome, cpf);
    cliente = p.consultarCpf(cliente);
    
    System.out.println("Digite o endereco do cliente");
    endereco = Console.readString();
    System.out.println("Digite o telefone do cliente");
    telefone = Console.readLong();
    
    cliente.setEndereco(endereco);
    cliente.setTelefone(telefone);
}

public void alteraCadastroVeiculo(PVeiculo p){
    
}

public void alteraCadastroMotorista(){
    
}

public void alteraCadastroFuncionario(){
    
}

public void alteraCadastroTipoLocacao(){
    
}

public void alteraCadastroLocacao(){
    
}

public void menuAlteracoes(PCliente pC, PVeiculo pV, PMotorista pM,
                            PFuncionario pF, PTipoLocacao pTL, PLocacao pL){

    int opcao=1;
    Principal p = new Principal();

    while (opcao != 0) { 

        System.out.println("Locarrão Rent a Car");
        System.out.println("Digite o número referente ao tipo de cadastro que deseja alterar.");
        System.out.println("1 - Cliente");
        System.out.println("2 - Motorista");
        System.out.println("3 - Funcionário");
        System.out.println("4 - Tipo de Locação");
        System.out.println("5 - Veículos");
        System.out.println("6 - Locação");
        System.out.println("Digite 0 zero para ir ao menu anterior.");

        opcao = Console.readInteger();

        switch (opcao) {

            case 1 :
                    p.alteraCadastroCliente(pC);
                    break;

            case 2:
                   p.menuCadastroMotorista(pM);
                   break;

            case 3:
                   p.menuCadastroFuncionario(pF);
                   break;

            case 4:
                   p.menuCadastroTipoDeLocacao(pTL);
                   break;

            case 5:
                   p.menuCadastroVeiculo(pV);
                   break;

            case 6:
                   p.menuCadastrosLocacao(pC, pV, pTL, pM, pL);
                   break;
         }
     }    
    
}

public static void main(String args[])  throws IOException{
    
                int opcao = 1;
                Principal auxP = new Principal();
                            
                
                PCliente persistenciaCliente = new PCliente();
                PFuncionario persistenciaFuncionario = new PFuncionario();
                PLocacao persistenciaLocacao = new PLocacao();
                PMotorista persistenciaMotorista = new PMotorista();
                PTipoLocacao persistenciaTipoLocacao = new PTipoLocacao();
                PVeiculo persistenciaVeiculo = new PVeiculo();
                
                persistenciaCliente.carregarClientesArquivo(persistenciaCliente.getClientes());
                persistenciaFuncionario.carregarFuncionariosArquivo(persistenciaFuncionario.getFuncionarios());
                persistenciaLocacao.carregarLocacoesArquivo(persistenciaLocacao.getLocacoes());
                persistenciaMotorista.carregarMotoristasArquivo(persistenciaMotorista.getMotoristas());
                persistenciaTipoLocacao.carregarTiposLocacoesArquivo(persistenciaTipoLocacao.getTiposDeLocacao());
                persistenciaVeiculo.carregarVeiculosArquivo(persistenciaVeiculo.getVeiculos());
                
                while (opcao != 0) {
                    System.out.println("Locarrão Rent a Car");
                    System.out.println("Digite o número referente à opção desejada.");
                    System.out.println("1 - Cadastrar (Cliente, Motorista, Funcionario, Veiculo, Tipo de Locação ou ainda para realizar uma Locação).");
                    System.out.println("2 - Alterar Cadastro");
                    System.out.println("3 - Consultar");
                    System.out.println("4 - Cadastrar Devolução");
                    System.out.println("5 - Excluir");
                    System.out.println("Digite 0 zero para sair");
                    
                    opcao = Console.readInteger();

                    switch (opcao) {
                        
                        case 1 :
                            auxP.menuCadastros(persistenciaCliente,
                                                persistenciaVeiculo,
                                                persistenciaMotorista,
                                                persistenciaFuncionario,
                                                persistenciaTipoLocacao,
                                                persistenciaLocacao);
                            break;
                            
                        case 2 : 
                            auxP.menuAlteracoes(persistenciaCliente,
                                                persistenciaVeiculo,
                                                persistenciaMotorista,
                                                persistenciaFuncionario,
                                                persistenciaTipoLocacao,
                                                persistenciaLocacao);
                            break;
                            
                        case 3 :
                            System.out.println("Ainda não implementado.");
                            //auxP.menuConsultas();
                            break;
                            
                        case 4 : 
                             System.out.println("Ainda não implementado.");
                            //auxP.menuCadastroDevolucoes();
                            break;
                            
                        case 5 :
                            System.out.println("Ainda não implementado.");
                            //auxP.menuExcluir();
                            break;
                            
                    }
                }
                
                persistenciaCliente.salvarClientesArquivo(persistenciaCliente.getClientes());
                persistenciaFuncionario.salvarFuncionariosArquivo(persistenciaFuncionario.getFuncionarios());
                persistenciaLocacao.salvarLocacoesArquivo(persistenciaLocacao.getLocacoes());
                persistenciaMotorista.salvarMotoristasArquivo(persistenciaMotorista.getMotoristas());
                persistenciaTipoLocacao.salvarTiposLocacoesArquivo(persistenciaTipoLocacao.getTiposDeLocacao());
                persistenciaVeiculo.salvarVeiculoArquivo(persistenciaVeiculo.getVeiculos());
    }
}